/*
 * Copyright 2010-2012 Susanta Tewari. <freecode4susant@users.sourceforge.net>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package coalescent.provider;

import coalescent.data.K69Data;
import coalescent.data.KC64Data;
import coalescent.data.meta.MetaInf_K69Data;
import coalescent.model.K69;
import coalescent.model.KC64;

import java.util.List;

/**
 * @author Susanta Tewari
 * @history First created on May 31, 2012
 */
public interface Providers {

    /**
     * Specifies a re-writable provider of {@code MetaInf_K69Data} using a single file.
     *
     * @version version
     * @author Susanta Tewari
     * @history First created on 11/10/2013
     */
    public interface MetaInf_K69Data_Provider_FileBased_RW
            extends commons.provider.Providers.FileBasedProvider_RW<MetaInf_K69Data> {}

    /**
     * Specifies {@code K69} model generator by a list of {@code thea} (mutation rate) values.
     */
    public interface K69GeneratorProvider
            extends commons.provider.Providers.ModelGeneratorProvider<List<Double>, K69> {}

    /**
     * Specifies {@code K69Data} provider using a single file.
     *
     * @version 1.0.0
     * @author Susanta Tewari
     * @history First created on 12/10/09
     */
    public interface K69DataProviderFileBased
            extends commons.provider.Providers.ModelDataProviderFileBased<K69, K69Data> {}

    /**
     * @version version
     * @since 1.4.0
     * @history Created on 03/20/2013
     * @author Susanta Tewari
     */
    public interface K69DataSimulatorProvider
            extends commons.provider.Providers.DataSimulatorProvider<K69, K69Data> {}

    /**
     * @version version
     * @since 1.4.0
     * @history Created on 02/10/2013
     * @author Susanta Tewari
     */
    public interface K69EstimatorProvider
            extends commons.provider.Providers.ModelEstimatorProvider<K69, K69Data> {}

    /**
     * @version version
     * @since 1.4.0
     * @history Created on 02/20/2013
     * @author Susanta Tewari
     */
    public interface K69LHoodProvider
            extends commons.provider.Providers.LikelihoodComputerProvider<K69, K69Data> {}

    /**
     * @version version
     * @since 1.4.0
     * @history Created on 02/20/2013
     * @author Susanta Tewari
     */
    public interface K69MultiLHoodProvider
            extends commons.provider.Providers.MultiLHoodComputerProvider<K69, K69Data> {}

    /**
     * @version version
     * @since 1.4.0
     * @history Created on 02/24/2013
     * @author Susanta Tewari
     */
    public interface KC64LHoodProvider
            extends commons.provider.Providers.LikelihoodComputerProvider<KC64, KC64Data.DEFAULT> {}

    /**
     * @version version
     * @since 1.4.0
     * @history Created on 02/24/2013
     * @author Susanta Tewari
     */
    public interface KC64MultiLHoodProvider
            extends commons.provider.Providers.MultiLHoodComputerProvider<KC64, KC64Data.DEFAULT> {}
}
